/*
 * Copyright (c) 2025 Huawei Device, Inc. Ltd. and <马弓手>.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#include "IonicWebView.h"
#include "cJSON.h"
#include "../NativeStorage/NativeStorage.h"

REGISTER_PLUGIN_CLASS(IonicWebView)

const string IonicWebView::SERVICE_PATH_NAME = "IONIC_SERVICE_PATH_NAME";

bool IonicWebView::execute(const string&  action, cJSON* args, CallbackContext cbc)
{
    if(action == "setServerBasePath") {
        if(cJSON_GetArraySize(args) > 0) {
            string strServicePath = cJSON_GetArrayItem(args, 0)->valuestring;
            Application::g_strHotCodeUpdateDirectory = strServicePath;
        }
        return true;
    }
    
    if(action == "getServerBasePath") {
        cbc.success(Application::g_strHotCodeUpdateDirectory.c_str());
        return true;
    }
    
    if(action == "persistServerBasePath") {
        if(!Application::g_strHotCodeUpdateDirectory.empty()) {
            NativeStorage::setData(IonicWebView::SERVICE_PATH_NAME, (void*)Application::g_strHotCodeUpdateDirectory.c_str(), NativeStorage::DataType_string, cbc);
        }
        return true;
    }
    return true;
}

void IonicWebView::pluginInitialize()
{
    string strServicePath;
    CallbackContext cbc;
    if(NativeStorage::getData(IonicWebView::SERVICE_PATH_NAME, &strServicePath, NativeStorage::DataType_string, cbc)) {
        if(!strServicePath.empty()) {
            Application::g_strHotCodeUpdateDirectory = strServicePath;
        }
    }
}